Functor ইন্টারফেস

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection)
119
119

Apache Commons Collections এর একটি গুরুত্বপূর্ণ অংশ হল Functor ইন্টারফেস। Functor হলো এমন একটি ধারণা যা সাধারণত functional programming এ ব্যবহৃত হয়। এটি এমন একটি object যা functionality ধারণ করে এবং একটি নির্দিষ্ট operation (অপারেশন) সম্পাদন করে। Apache Commons Collections এ, Functor ইন্টারফেসটি বেশ কিছু functional-style অপারেশনগুলিকে সহজে প্রয়োগ করার জন্য ব্যবহৃত হয়, যেমন predicate checking, transformation ইত্যাদি।

Functor ইন্টারফেস কী?

Functor ইন্টারফেস একটি সাধারণ ধারণা যা operation বা functional tasks করার জন্য ব্যবহৃত হয়। এটি মূলত একটি ফাংশন বা মেথডের রিপ্রেজেন্টেশন হিসেবে কাজ করে, যা কোনো নির্দিষ্ট ডেটা প্রক্রিয়া করতে পারে।

Functor ইন্টারফেসে সাধারণত একটি execute মেথড থাকে, যা এক বা একাধিক আর্গুমেন্ট নেয় এবং কোনো কার্য সম্পাদন করে।

Functor ইন্টারফেসের প্রধান বৈশিষ্ট্য

  • Functional Programming Support: এটি Java এ ফাংশনাল প্রোগ্রামিং প্যাটার্নগুলো ব্যবহারে সহায়তা করে।
  • Reusable Operations: Functor বিভিন্ন ধরণের কার্যক্রম সম্পাদন করতে ব্যবহার করা যেতে পারে এবং এই কার্যক্রমগুলো পুনঃব্যবহারযোগ্য হয়।
  • Extensible: এটি এমন একটি কাঠামো প্রদান করে যা বিভিন্ন ধরনের অপারেশন বা কার্যক্রমের জন্য ব্যবহার করা যেতে পারে।

Functor ইন্টারফেস উদাহরণ

Apache Commons Collections লাইব্রেরি Functor এর জন্য অনেক ধরনের ইন্টারফেস এবং ক্লাস প্রদান করেছে, যেমন Predicate, Transformer ইত্যাদি, যা Functor ইন্টারফেসের বাস্তবায়ন।

1. Predicate (Functor)

Predicate একটি Functor যা কোনো নির্দিষ্ট শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি একটি Boolean রিটার্ন করে, যা একটি শর্তের সত্যতা বা মিথ্যাতা নির্দেশ করে।

উদাহরণ: Predicate ব্যবহার
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.functors.NotPredicate;
import org.apache.commons.collections4.functors.TruePredicate;

public class FunctorExample {
    public static void main(String[] args) {
        // Predicate তৈরি করা
        Predicate<String> truePredicate = TruePredicate.getInstance();
        Predicate<String> notPredicate = new NotPredicate<>(truePredicate);

        // Predicate পরীক্ষা করা
        System.out.println("Predicate result: " + notPredicate.evaluate("Hello")); // Output: false
    }
}

এখানে:

  • TruePredicate.getInstance() একটি predicate তৈরি করে যা সবসময় true রিটার্ন করবে।
  • NotPredicate ক্লাসটি একটি বিদ্যমান predicate এর বিপরীত ফলাফল রিটার্ন করে।

2. Transformer (Functor)

Transformer একটি ফাংশনাল ফিচার যা একটি আর্গুমেন্ট নেয় এবং একটি নতুন মান রিটার্ন করে। এটি ডেটা রূপান্তর বা ট্রান্সফর্মেশনের জন্য ব্যবহৃত হয়।

উদাহরণ: Transformer ব্যবহার
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.ConstantTransformer;

public class FunctorExample {
    public static void main(String[] args) {
        // Transformer তৈরি করা
        Transformer<String, Integer> transformer = new ConstantTransformer<>(5);

        // Transformer ব্যবহার করে মান রূপান্তর করা
        System.out.println("Transformed result: " + transformer.transform("Hello")); // Output: 5
    }
}

এখানে:

  • ConstantTransformer একটি ফিক্সড ভ্যালু প্রদান করে, যে কোন ইনপুট গ্রহণ করলেও সেটি একই রিটার্ন করবে (এই ক্ষেত্রে, 5)।

3. Invoker (Functor)

Invoker ইন্টারফেস Functor এর একটি বাস্তবায়ন, যা একাধিক Functor এর মধ্যে কোনো একটি নির্দিষ্ট Functor execute করতে পারে। এটি command pattern এর মতো কাজ করে যেখানে বিভিন্ন কার্যক্রম সংজ্ঞায়িত থাকে, এবং ইনভোকারের মাধ্যমে তা চালানো হয়।

উদাহরণ: Invoker ব্যবহার
import org.apache.commons.collections4.FunctorException;
import org.apache.commons.collections4.functors.Invoker;

public class FunctorExample {
    public static void main(String[] args) {
        // Invoker ব্যবহার করে Functor execute করা
        Invoker invoker = new Invoker();
        
        // Functor তৈরি
        FunctorExampleInvoker functorInvoker = new FunctorExampleInvoker();
        
        // Functor execute করা
        try {
            invoker.invoke(functorInvoker, new Object[] { "test" });
        } catch (FunctorException e) {
            e.printStackTrace();
        }
    }

    public static class FunctorExampleInvoker {
        public void execute(String param) {
            System.out.println("Executing functor with param: " + param);
        }
    }
}

এখানে:

  • Invoker ক্লাসটি Functor execute করার জন্য ব্যবহৃত হয়েছে।
  • FunctorExampleInvoker একটি কাস্টম ক্লাস যা execute মেথড সম্পাদন করে।

Functor ইন্টারফেস ব্যবহার করার উপকারিতা

  1. Code Reusability: Functor ব্যবহার করার মাধ্যমে আপনি একাধিক স্থানে একই কার্যকারিতা পুনঃব্যবহার করতে পারেন।
  2. Separation of Concerns: Functor ব্যবহারের ফলে, ডেটা প্রসেসিং এবং ফাংশনাল অপারেশনগুলো আলাদা করা যায়, যা কোডের পরিচ্ছন্নতা ও রক্ষণাবেক্ষণ সহজ করে।
  3. Functional Programming: Functor একটি functional programming প্যাটার্ন অনুসরণ করে, যা আপনার প্রোগ্রামে ফাংশনাল অপারেশনগুলিকে সহজে প্রয়োগ করতে সহায়তা করে।
  4. Extensibility: আপনি সহজেই নতুন ধরনের Functor তৈরি করতে পারেন এবং বিদ্যমান ফিচারগুলির উপর ভিত্তি করে নতুন ফাংশনালিটি সংযুক্ত করতে পারেন।

সারাংশ

  • Functor ইন্টারফেস একটি শক্তিশালী উপাদান যা Apache Commons Collections লাইব্রেরিতে ফাংশনাল অপারেশন এবং কার্য সম্পাদনের জন্য ব্যবহৃত হয়।
  • Predicate, Transformer, Invoker এর মতো Functor ইন্টারফেসের বাস্তবায়ন রয়েছে, যা আপনাকে কার্য সম্পাদন করতে সহায়তা করে।
  • Functor ব্যবহার করে আপনি functional programming স্টাইলে কার্যকরী অপারেশনগুলো সহজভাবে সম্পাদন করতে পারেন।

Apache Commons Collections এর Functor ইন্টারফেস এবং এর ক্লাসগুলো ব্যবহার করে আপনার Java অ্যাপ্লিকেশনকে আরো নমনীয়, রিচ ফিচার সমৃদ্ধ এবং কার্যকরী করতে পারেন।

common.content_added_by

Functor কি এবং এর প্রকারভেদ

127
127

Functor কি?

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor হল একটি সাধারণ প্রোগ্রামিং কনসেপ্ট, যা একটি কোড ব্লক বা লজিক্যাল ফাংশনালিটি হিসেবে কাজ করে। এটি একটি অবজেক্ট যা একটি বা একাধিক ইনপুট গ্রহণ করে এবং একটি আউটপুট প্রদান করে, অথবা কোনো প্রভাব (side effect) তৈরি করে।

জাভাতে, Functor সাধারণত একটি ইন্টারফেস হিসেবে তৈরি হয়, যা একটি নির্দিষ্ট পদ্ধতি (method) বাস্তবায়ন করে। অ্যাপাচি কমন্স কালেকশনস Functor ব্যবহার করে বিভিন্ন ফাংশনাল অপারেশন (যেমন ফিল্টারিং, ট্রান্সফর্মেশন) সহজ করে।


Functor এর প্রকারভেদ

অ্যাপাচি কমন্স কালেকশনস-এ চারটি প্রধান ধরনের Functor রয়েছে:

১. Transformer

Transformer হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি প্রসেসিং সম্পন্ন করার পরে আউটপুট প্রদান করে।

ব্যবহার উদাহরণ: ডেটা রূপান্তরের জন্য ব্যবহৃত হয়।

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class TransformerExample {
    public static void main(String[] args) {
        // Transformer তৈরি
        Transformer<Integer, String> transformer = input -> "Number: " + input;

        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // ডেটা রূপান্তর
        List<String> transformed = new ArrayList<>(CollectionUtils.collect(numbers, transformer));
        System.out.println(transformed);
    }
}

আউটপুট:

[Number: 1, Number: 2, Number: 3]

২. Predicate

Predicate হল একটি Functor যা একটি ইনপুট গ্রহণ করে এবং একটি বুলিয়ান (true/false) মান প্রদান করে।

ব্যবহার উদাহরণ: ডেটা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়।

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class PredicateExample {
    public static void main(String[] args) {
        // Predicate তৈরি
        Predicate<Integer> isEven = input -> input % 2 == 0;

        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);

        // ডেটা ফিল্টারিং
        List<Integer> evenNumbers = new ArrayList<>(CollectionUtils.select(numbers, isEven));
        System.out.println(evenNumbers);
    }
}

আউটপুট:

[2, 4]

৩. Closure

Closure একটি Functor যা একটি ইনপুট গ্রহণ করে এবং কোনো রিটার্ন না দিয়ে একটি নির্দিষ্ট কাজ সম্পন্ন করে।

ব্যবহার উদাহরণ: লুপিং বা ইনপুটের উপর কোনো কার্য সম্পাদনে ব্যবহৃত হয়।

import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class ClosureExample {
    public static void main(String[] args) {
        // Closure তৈরি
        Closure<Integer> printClosure = input -> System.out.println("Processing: " + input);

        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // Closure প্রয়োগ
        CollectionUtils.forAllDo(numbers, printClosure);
    }
}

আউটপুট:

Processing: 1  
Processing: 2  
Processing: 3  

৪. Factory

Factory একটি Functor যা কোনো ইনপুট ছাড়াই একটি নতুন অবজেক্ট তৈরি করে আউটপুট প্রদান করে।

ব্যবহার উদাহরণ: নির্দিষ্ট অবজেক্ট তৈরি করতে ব্যবহৃত হয়।

import org.apache.commons.collections4.Factory;
import org.apache.commons.collections4.ListUtils;

import java.util.List;

public class FactoryExample {
    public static void main(String[] args) {
        // Factory তৈরি
        Factory<String> stringFactory = () -> "New String Object";

        // Factory থেকে একটি নতুন লিস্ট তৈরি
        List<String> newList = ListUtils.lazyList(ListUtils.emptyIfNull(null), stringFactory);

        // লিস্টে আইটেম অ্যাক্সেস
        newList.add("Hello");
        System.out.println(newList.get(1)); // Factory ব্যবহার করে তৈরি হবে
    }
}

আউটপুট:

New String Object

Functor এর উপযোগিতা

  • কোড পুনরায় ব্যবহার: বারবার ব্যবহৃত হওয়া কোড ব্লকগুলোকে সংজ্ঞায়িত এবং পুনঃব্যবহারের সুযোগ দেয়।
  • ডেটা প্রসেসিং সহজ করা: জটিল ডেটা ফিল্টারিং, রূপান্তর এবং অন্যান্য প্রক্রিয়া সহজ করে।
  • মডিউলারিটি বৃদ্ধি: কোডকে ছোট, স্বাধীন এবং মডুলার অংশে ভাগ করতে সাহায্য করে।

সারাংশ
Functor হল অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির একটি শক্তিশালী বৈশিষ্ট্য, যা ডেটা ট্রান্সফরমেশন, ফিল্টারিং, এবং অন্যান্য কার্য সম্পাদনে ব্যবহৃত হয়। এর প্রকারভেদ (Transformer, Predicate, Closure, Factory) বিভিন্ন প্রয়োজন অনুযায়ী ডেটা প্রসেসিং সহজ করে তোলে।

common.content_added_by

Predicate, Transformer এবং Closure এর সাথে Functor এর ইন্টিগ্রেশন

161
161

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor একটি শক্তিশালী ধারণা, যা Predicate, Transformer, এবং Closure এর মাধ্যমে বিভিন্ন কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। এটি কার্যক্রমকে জেনেরিক এবং রিইউজেবল করার সুযোগ প্রদান করে।


Functor কি?

Functor হল একটি ফাংশনাল ইন্টারফেস যা একটি নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। অ্যাপাচি কমন্স লাইব্রেরি Functor ধারণার মাধ্যমে বিভিন্ন কাজ সহজতর করে।


Predicate কি?

Predicate একটি ফাংশনাল ইন্টারফেস, যা একটি শর্ত (condition) যাচাই করে এবং true বা false রিটার্ন করে। এটি সাধারণত ডেটা ফিল্টারিং বা শর্ত চেক করার জন্য ব্যবহৃত হয়।

উদাহরণ: Predicate ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;

import java.util.ArrayList;
import java.util.List;

public class PredicateExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(15);
        numbers.add(20);
        numbers.add(25);

        // Predicate যা শুধু জোড় সংখ্যা রিটার্ন করে
        Predicate<Integer> isEven = number -> number % 2 == 0;

        // ফিল্টার করা
        List<Integer> evenNumbers = new ArrayList<>();
        CollectionUtils.select(numbers, isEven, evenNumbers);

        System.out.println("Even Numbers: " + evenNumbers);
    }
}

আউটপুট:

Even Numbers: [10, 20]

Transformer কি?

Transformer একটি অবজেক্টকে অন্য একটি অবজেক্টে রূপান্তরিত করে। এটি ম্যাপিং বা ডেটা ট্রান্সফরমেশনের জন্য ব্যবহৃত হয়।

উদাহরণ: Transformer ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;

import java.util.ArrayList;
import java.util.List;

public class TransformerExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // Transformer যা সংখ্যা স্কয়ার করে
        Transformer<Integer, Integer> squareTransformer = number -> number * number;

        // ট্রান্সফর্ম করা
        List<Integer> squaredNumbers = new ArrayList<>();
        CollectionUtils.transform(numbers, squareTransformer);

        System.out.println("Squared Numbers: " + numbers);
    }
}

আউটপুট:

Squared Numbers: [1, 4, 9]

Closure কি?

Closure একটি কার্যক্রম সম্পাদন করে এবং এর কোনো আউটপুট রিটার্ন করে না। এটি সাধারণত সাইড এফেক্টযুক্ত কার্যক্রমের জন্য ব্যবহৃত হয়।

উদাহরণ: Closure ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Closure;

import java.util.ArrayList;
import java.util.List;

public class ClosureExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // Closure যা প্রতিটি সংখ্যা প্রিন্ট করে
        Closure<Integer> printClosure = System.out::println;

        // লিস্টে কার্যক্রম প্রয়োগ
        CollectionUtils.forAllDo(numbers, printClosure);
    }
}

আউটপুট:

1
2
3

Functor এর ইন্টিগ্রেশন

Functor ধারণার মাধ্যমে Predicate, Transformer, এবং Closure কে একই কাঠামোয় ব্যবহার করা যায়। এটি কোডকে আরও জেনেরিক এবং মডুলার করে তোলে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Functor এর ইন্টিগ্রেশন রয়েছে:

উদাহরণ: Predicate, Transformer এবং Closure একত্রে ব্যবহার

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;

import java.util.ArrayList;
import java.util.List;

public class FunctorIntegrationExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        // Predicate: শুধু জোড় সংখ্যা সিলেক্ট করে
        Predicate<Integer> isEven = number -> number % 2 == 0;

        // Transformer: সংখ্যা দ্বিগুণ করে
        Transformer<Integer, Integer> doubleTransformer = number -> number * 2;

        // Closure: সংখ্যাগুলো প্রিন্ট করে
        Closure<Integer> printClosure = System.out::println;

        // Filter, Transform এবং Apply
        List<Integer> evenNumbers = new ArrayList<>();
        CollectionUtils.select(numbers, isEven, evenNumbers);
        CollectionUtils.transform(evenNumbers, doubleTransformer);
        CollectionUtils.forAllDo(evenNumbers, printClosure);
    }
}

আউটপুট:

4
8

সারাংশ

  • Predicate: শর্ত যাচাইয়ের জন্য ব্যবহৃত।
  • Transformer: ডেটা রূপান্তরের জন্য ব্যবহৃত।
  • Closure: কার্যক্রম সম্পাদনের জন্য ব্যবহৃত।
  • Functor: এগুলো একত্রে ব্যবহারের মাধ্যমে কার্যকর এবং পুনর্ব্যবহারযোগ্য কার্যক্রম তৈরি করা যায়।

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি Functor এর মাধ্যমে জাভার কার্যক্রমকে আরও মডুলার এবং কার্যকরী করে তোলে।

common.content_added_by

Commons Collections এর বিভিন্ন Functor Class এর ব্যবহার

138
138

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি একটি শক্তিশালী টুল যা Java প্রোগ্রামিং ভাষায় উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ ফিচার হল Functor Classes, যা ফাংশনাল প্রোগ্রামিংয়ের ধারণা অনুসরণ করে এবং আপনাকে ফাংশনাল প্রোগ্রামিংয়ের সুবিধা দিয়ে ডেটা ম্যানিপুলেশন করতে সাহায্য করে।

Functor হল একটি অবজেক্ট যা কিছু প্রক্রিয়া বা অপারেশন প্রতিনিধিত্ব করে, যা সাধারণত কোন অ্যাকশন বা ফাংশন (যেমন মান পরিবর্তন, গণনা, ট্রান্সফরমেশন ইত্যাদি) সম্পাদন করতে ব্যবহৃত হয়। কমন্স কালেকশনসে Functor ক্লাসগুলি আপনাকে কালেকশন এর আইটেমগুলির সাথে বিভিন্ন কার্যক্রম (যেমন ট্রান্সফরমেশন, ম্যানিপুলেশন, ইত্যাদি) করার জন্য সাহায্য করে।


১. Functor Class এর ভূমিকা

Functor Class গুলি ক্লাসের মধ্যে ফাংশনাল কার্যকলাপ বা অপারেশন সংজ্ঞায়িত করে। এটি মূলত একটি এক্সিকিউটেবল অপারেশন যা কোনো ক্যালকুলেশন বা ট্রান্সফরমেশন সম্পাদন করে। ফানক্টর ক্লাসের মাধ্যমে আপনি বিভিন্ন রকমের ফাংশনাল অপারেশন একত্রিত এবং পুনঃব্যবহারযোগ্য করতে পারেন, যেমন:

  • Transformers: ডেটা ট্রান্সফরমেশন, যেমন মান পরিবর্তন বা কাস্টম লজিক প্রয়োগ করা।
  • Predicates: শর্তসাপেক্ষ ফিল্টারিং এবং যাচাই।
  • Actions: একটি নির্দিষ্ট কার্যকলাপ সম্পাদন করা (যেমন প্রিন্ট করা, এক্সপোর্ট করা, ইত্যাদি)।

২. Functor Class এর বিভিন্ন ধরন

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি বিভিন্ন ধরনের Functor Class সরবরাহ করে যা ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংকে সহজ করে তোলে। নিচে কিছু সাধারণ Functor Class এবং তাদের ব্যবহার আলোচনা করা হল:

২.১. Transformer (ট্রান্সফরমার)

Transformer ফানক্টর ক্লাসটি একটি মান (value) গ্রহণ করে এবং সেটি একটি পরিবর্তিত বা ট্রান্সফর্মড মানে রূপান্তর করে। এটি মূলত একটি মাপিং (mapping) অপারেশন হিসেবে কাজ করে, যেখানে ইনপুট মানটি একটি নতুন আউটপুট মানে রূপান্তরিত হয়।

Transformer ক্লাসের প্রধান সুবিধা হল, আপনি একই ফাংশন বা ট্রান্সফরমেশন একাধিক জায়গায় ব্যবহার করতে পারেন, এবং এটি পুনঃব্যবহারযোগ্য।

উদাহরণ: Transformer ব্যবহার

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.ConstantTransformer;

public class TransformerExample {
    public static void main(String[] args) {
        // Create a transformer that always returns "Hello"
        Transformer<Object, String> transformer = new ConstantTransformer("Hello");
        
        // Apply the transformer
        String result = transformer.transform(null);  // Output: "Hello"
        System.out.println(result);
    }
}

এখানে:

  • ConstantTransformer একটি Transformer যা কোন ইনপুট ছাড়াই একটি নির্দিষ্ট মান (এখানে "Hello") প্রদান করবে।

২.২. Predicate (প্রেডিকেট)

Predicate ফানক্টর ক্লাসটি একটি শর্ত (condition) পরীক্ষা করে এবং true বা false রিটার্ন করে। এটি কালেকশনে শর্তসাপেক্ষ নির্বাচন বা ফিল্টারিংয়ের জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন আপনি চান একটি কালেকশন থেকে শুধুমাত্র নির্দিষ্ট শর্ত পূর্ণকারী আইটেমগুলি নির্বাচন করতে।

উদাহরণ: Predicate ব্যবহার

import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.functors.TruePredicate;

public class PredicateExample {
    public static void main(String[] args) {
        // Create a predicate that always returns true
        Predicate<Object> predicate = TruePredicate.INSTANCE;
        
        // Apply the predicate
        boolean result = predicate.evaluate(new Object());  // Output: true
        System.out.println(result);
    }
}

এখানে:

  • TruePredicate.INSTANCE এমন একটি প্রেডিকেট যা সবসময় true রিটার্ন করে।

২.৩. Action (অ্যাকশন)

Action ফানক্টর ক্লাসটি কোনো কার্যকলাপ বা এক্সিকিউশন সম্পাদন করে। এটি সাধারণত কোনো ইনপুট গ্রহণ করে এবং কোনো নির্দিষ্ট কার্যক্রম সম্পাদন করে, যেমন কনসোল আউটপুট, ফাইল লেখা, ইত্যাদি।

উদাহরণ: Action ব্যবহার

import org.apache.commons.collections4.Action;
import org.apache.commons.collections4.functors.PrintAction;

public class ActionExample {
    public static void main(String[] args) {
        // Create an action that prints a message
        Action action = new PrintAction("Hello, Apache Commons!");
        
        // Execute the action
        action.execute();
    }
}

এখানে:

  • PrintAction একটি অ্যাকশন যা নির্দিষ্ট একটি বার্তা (যেমন "Hello, Apache Commons!") কনসোল আউটপুট হিসেবে প্রিন্ট করে।

২.৪. TransformerChain (ট্রান্সফরমার চেইন)

TransformerChain ফানক্টর ক্লাসটি একাধিক ট্রান্সফরমারকে একটি চেইনে একত্রিত করে, এবং ইনপুট মানের উপর একাধিক ট্রান্সফরমেশন প্রক্রিয়া সম্পাদন করে। এটি আপনাকে একাধিক ট্রান্সফরমেশন একসাথে প্রয়োগ করতে সাহায্য করে।

উদাহরণ: TransformerChain ব্যবহার

import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.functors.TransformerChain;
import java.util.Arrays;
import java.util.List;

public class TransformerChainExample {
    public static void main(String[] args) {
        // Define two transformers
        Transformer<String, String> toUpperCase = new Transformer<String, String>() {
            @Override
            public String transform(String input) {
                return input.toUpperCase();
            }
        };
        
        Transformer<String, String> addExclamation = new Transformer<String, String>() {
            @Override
            public String transform(String input) {
                return input + "!";
            }
        };
        
        // Chain the transformers
        Transformer<String, String> chain = new TransformerChain<>(Arrays.asList(toUpperCase, addExclamation));
        
        // Apply the transformer chain
        String result = chain.transform("hello");
        System.out.println(result);  // Output: "HELLO!"
    }
}

এখানে:

  • দুটি ট্রান্সফরমার (একটি toUpperCase এবং অন্যটি addExclamation) একত্রিত হয়ে একটি চেইন তৈরি করা হয়েছে এবং ইনপুটের উপর একাধিক ট্রান্সফরমেশন প্রয়োগ করা হয়েছে।

৩. Functor Class ব্যবহার করার উপকারিতা

  • পুনঃব্যবহারযোগ্যতা: Functor ক্লাসের মাধ্যমে একই ফাংশন বা অপারেশন একাধিক জায়গায় ব্যবহার করা যেতে পারে, যার ফলে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে।
  • বিস্তারিত কাস্টমাইজেশন: আপনি আপনার নিজস্ব অপারেশন বা কার্যকলাপ তৈরি করতে পারেন এবং সেগুলি Functor ক্লাসে সংজ্ঞায়িত করে পুনরায় ব্যবহার করতে পারেন।
  • ফাংশনাল প্রোগ্রামিং: Functor ক্লাস ফাংশনাল প্রোগ্রামিংয়ের ধারণা অনুসরণ করে, যা কোডকে আরও পরিষ্কার এবং কমপ্যাক্ট করে তোলে।
  • ইউটিলিটি: এটি কালেকশন ফিল্টারিং, ট্রান্সফরমেশন, এবং অ্যাকশনের জন্য একটি শক্তিশালী এবং সোজা উপায় প্রদান করে।

সারাংশ

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরির Functor Class ডেটা ম্যানিপুলেশন এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য একটি শক্তিশালী টুল। এর মধ্যে Transformer, Predicate, Action, TransformerChain প্রভৃতি ফানক্টর ক্লাস রয়েছে, যা ডেটা ট্রান্সফরমেশন, শর্তসাপেক্ষ ফিল্টারিং এবং কার্যকলাপ সম্পাদন করার জন্য ব্যবহৃত হয়। Functor ক্লাসগুলির মাধ্যমে আপনি সহজে এবং কার্যকরভাবে আপনার ডেটা বা কালেকশনগুলোর উপর বিভিন্ন ফাংশন বা অপারেশন প্রয়োগ করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion